package manejadores;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import censo.db;
import entidades.Personal;

public class ManejadorPersonal {

	private db conexion = null;
	private Personal personal;


	
	public Personal getPersonal() {
		return personal;
	}
	public void setPersonal(Personal personal) {
		this.personal = personal;
	}
	public ManejadorPersonal(db conexion) {
		super();
		this.conexion = conexion;
		this.setPersonal(new Personal());
	}
	
	public ManejadorPersonal(db conexion, Personal personal) {
		super();
		this.conexion = conexion;
		this.setPersonal(personal);
	}
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	
	
	public boolean add() throws SQLException{
		boolean result = false;

			String sql = "insert into personal (codigo,nombre,direccion,telefono,correo,estado,fecha) values (?,?,?,?,?,?,sysdate())";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, personal.getCodigo());
			pst.setString(2, personal.getNombre());
			pst.setString(3, personal.getDireccion());
			pst.setString(4, personal.getTelefono());
			pst.setString(5, personal.getCorreo());
			pst.setString(6, personal.getEstado());
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		
		return result;
	}
	
	public boolean update(String key) throws SQLException{
		boolean result = false;

			String sql = "update personal set codigo=?,nombre=?,direccion=?,telefono=?,correo=?,estado=? where codigo=?";
			
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, personal.getCodigo());
			pst.setString(2, personal.getNombre());
			pst.setString(3, personal.getDireccion());
			pst.setString(4, personal.getTelefono());
			pst.setString(5, personal.getCorreo());
			pst.setString(6, personal.getEstado());
			pst.setString(7, key);
			
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		return result;
	}
	public boolean remove(String key) throws SQLException {
		boolean result = false;

			String sql = "delete from personal where codigo=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			

		return result;	
	}
	
	
	public boolean exist(String key) throws SQLException {
		boolean result = false;

			String sql = "select codigo from personal where codigo = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				result = true;
			}
			rs.close();
			
		
		return result;	
	}
	
	public boolean Find(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from personal where codigo=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				personal = new Personal();
				personal.setCodigo(rs.getString("codigo"));
				personal.setNombre(rs.getString("nombre"));
				personal.setDireccion(rs.getString("direccion"));
				personal.setTelefono(rs.getString("telefono"));
				personal.setCorreo(rs.getString("correo"));
				personal.setEstado(rs.getString("estado"));
				personal.setFecha(rs.getString("fecha"));
				
				result = true;
			}
			rs.close();
			
		return result;	
	}
	
	public ArrayList<Personal> list() throws SQLException {
		ArrayList<Personal> personas = new ArrayList<Personal>();
		
			String sql = "select * from personal order by nombre";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Personal personal = new Personal();
				personal.setCodigo(rs.getString("codigo"));
				personal.setNombre(rs.getString("nombre"));
				personal.setDireccion(rs.getString("direccion"));
				personal.setTelefono(rs.getString("telefono"));
				personal.setCorreo(rs.getString("correo"));
				personal.setEstado(rs.getString("estado"));
				personal.setFecha(rs.getString("fecha"));
				personas.add(personal);
			}
			rs.close();
		
		return personas;
	}
	
	
	
	public ArrayList<Personal> list(String filtro) throws SQLException {
			if (filtro.isEmpty()) {
				throw new SQLException("Cadena de filtro no puede estar vacia");
			}
			
			ArrayList<Personal> personas = new ArrayList<Personal>();
			
			String sql = "select * from personal ";
			sql += " where " + filtro ;		
			sql += " order by nombre";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Personal personal = new Personal();
				personal.setCodigo(rs.getString("codigo"));
				personal.setNombre(rs.getString("nombre"));
				personal.setDireccion(rs.getString("direccion"));
				personal.setTelefono(rs.getString("telefono"));
				personal.setCorreo(rs.getString("correo"));
				personal.setEstado(rs.getString("estado"));
				personal.setFecha(rs.getString("fecha"));
				personas.add(personal);
			}
			rs.close();
		
		return personas;	
	}
	
	
}